package com.dingding.common.core.amap.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dingding.common.core.amap.AmapHttpClientUtil;
import com.dingding.common.core.amap.AmapValidateUtil;
import com.dingding.common.core.amap.dto.ResGetMapShowRoute;
import com.dingding.common.core.amap.service.IAmapService;
import com.dingding.common.core.util.ToolUtil;

/**
 * 
 * @ClassName: IAmapService 
 * @Description: 高德地图API操作相关业务接口实现
 * @author CHEHAUNBO 
 * @date 2016年1月13日 上午11:34:25
 * @version v1.8
 * @since v1.8
 * 
 */
@Component("amapService")
public class AmapServiceImpl extends AmapValidateUtil implements IAmapService {

	private static final Logger log = Logger.getLogger(AmapServiceImpl.class);

	/**
	 * 
	 * @Title: getMapShowRoute 
	 * @Description: 根据起、终点经纬度调用高德地图API获取在地图
	 * @param origin 起始点
	 * @param destination 终点
	 * @return List<ResGetMapShowRoute> 显示给客户端的地图数据
	 * @author CHEHAUNBO
	 * @since v1.8
	 * @Override
	 * 
	 */
	public List<ResGetMapShowRoute> getMapShowRoute(String origin, String destination) {

		// 调用获取地图显示路线接口
		JSONObject jsonObject = AmapHttpClientUtil.getMapRoute(origin, destination);

		// 响应给客户端的路线数据
		List<ResGetMapShowRoute> getMapShowRoutes = new ArrayList<ResGetMapShowRoute>();

		// 由于高德给返回的数据客户端有的不需要，所以需要重新拼装数据
		if (isGetAmapShowRouteSuccess(jsonObject)) {

			JSONObject routeJsonObject = jsonObject.getJSONObject("route");

			if (routeJsonObject != null) {

				JSONArray jsonArray = routeJsonObject.getJSONArray("paths");

				if (jsonArray != null && jsonArray.size() > 0) {

					jsonArray = jsonArray.getJSONObject(0).getJSONArray("steps");

					for (int i = 0; i < jsonArray.size(); i++) {

						ResGetMapShowRoute getMapShowRoute = new ResGetMapShowRoute();

						JSONObject stepsObject = jsonArray.getJSONObject(i);

						if (stepsObject != null) {

							// 行驶指示
							getMapShowRoute.setInstruction(stepsObject.get("instruction").toString());

							// 行驶方向
							getMapShowRoute.setOrientation(stepsObject.get("orientation").toString());

							// 道路名称
							getMapShowRoute.setOrientation(stepsObject.get("orientation").toString());

							// 此路段坐标点字符串
							getMapShowRoute.setPolyline(stepsObject.get("polyline").toString());

						}

						getMapShowRoutes.add(getMapShowRoute);

					}
				}

			}

		}

		return getMapShowRoutes;

	}

	/**
	 * @Title: getDistanceByDeuce
	 * @Description: 获取两点之间的距离
	 * @param origin 起点经纬度
	 * @param destination 终点经纬度
	 * @author yuHaiQing
	 * @return int    返回类型
	 */
	@Override
	public double getDistanceByDeuce(String origin, String destination) {

		// 两点之间的距离
		double distance = -1;

		// 判断传入参数(起点经纬度、终点经纬度)是否为空
		if (ToolUtil.isBlank(origin) || ToolUtil.isBlank(destination)) {
			log.info("获取两点之间的距离时，传入参数为空");
			return distance;
		}

		// 调用获取地图显示路线接口
		JSONObject jsonObject = AmapHttpClientUtil.getMapRoute(origin, destination);

		// 由于高德给返回的数据客户端有的不需要，所以需要重新拼装数据
		if (isGetAmapShowRouteSuccess(jsonObject)) {

			// 获取节点route对象
			JSONObject routeJsonObject = jsonObject.getJSONObject("route");

			// 判断route对象是否为空
			if (routeJsonObject != null) {

				// 获取节点paths对象
				JSONArray jsonArray = routeJsonObject.getJSONArray("paths");

				if (jsonArray != null && jsonArray.size() > 0) {

					// 获取两点之间的距离(单位：千米)
					distance = Double.valueOf(jsonArray.getJSONObject(0).getString("distance")) / 1000;

				}

			}

		}

		return distance;
	}

}
